/**
 * @title: JWTUtils
 * @projectName mscloud
 * @Description TODO
 * @Author
 * @Date 2021/8/25 10:23
 */
package com.sugon.magicapi.utils;



import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.config.MagicModule;
import org.ssssssss.script.annotation.Comment;

import java.util.Date;

@Component
public class JWTUtils implements MagicModule {

    private String secret="123456";


    private  Long expiration=Long.valueOf(24*60*60*1000);

    /**
     * 创建token
     * @param username 用户名
     * @return
     */
    @Comment("生成Token")
    public  String generateToken(String username) {
        return Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, secret)
                .setSubject(username)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + expiration * 1000))
                .compact();

    }


    /**
     * 从token中获取用户名
     * @param token
     * @return
     */
    public  String getUserNameFromToken(String token){
        try{
            return getTokenBody(token).getSubject();
        }catch (Exception e){
            return "nopass";
        }

    }


    /**
     *  是否已过期
     * @param token
     * @return
     */
    public  boolean isExpiration(String token){
        return getTokenBody(token).getExpiration().before(new Date());
    }


    /**
     * 获取token中的信息
     * @param token
     * @return
     */
    private Claims getTokenBody(String token){
        return Jwts.parser()
                .setSigningKey(secret)
                .parseClaimsJws(token)
                .getBody();
    }

    @Override
    public String getModuleName() {
        return "jwt";
    }
}
